package com.szcinda.service.dto.zadOrder;

import com.szcinda.controller.Result;
import com.szcinda.controller.params.QueryDto;
import com.szcinda.repository.ExchangeRate;
import com.szcinda.repository.OrderFee;
import com.szcinda.repository.ZadOrder;
import com.szcinda.service.PageResult;
import com.szcinda.service.dto.history.ZadOrderExportVo;
import com.szcinda.service.dto.log.OperateOrderDto;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface ZadOrderService {
    void create(ZadOrderCreateDto createDto);

    void update(ZadOrderUpdateDto updateDto);

    void update(ZadOrderUpdatePartDto updateDto);

    void delete(String id, String userId);

    PageResult<ZadOrderDto> query(ZadOrderQueryDto params);

    List<ZadOrderDto> queryAll(ZadOrderQueryDto params);

    List<ZadOrderDto.OrderFollowDto> getFollowsById(String id);

    void confirmOrder(List<String> ids, String userId);

    void unConfirmOrder(List<String> ids, String userId);

    List<ZadOrderDto> query(String orgId, String clientId, String createDateStart, String createDateEnd, String currency, String type, List<ExchangeRate> rateList, String userId);

    List<ZadOrderDto> query(QueryDto queryDto);

    List<ZadOrderDto> getAllByIds(List<String> ids);

    List<ZadOrderDto> getAllByIds(List<String> ids, String type, String currencyType, List<ExchangeRate> rateList);

    void lockFee(List<String> collect, Set<String> lockColumns);

    List<ZadOrder> findAlertList(String orgId);

    void changeInvoice(List<String> orderIds, String type, String opId, String remark);

    void changeSettlement(List<String> orderIds, String type, String opId, String remark);

    void invoiceOrder(OperateOrderDto operateOrderDto);

    void settlementOrder(OperateOrderDto operateOrderDto);

    Result<?> batchCreate(List<ZadOrderImportDto> importDatas, String opId);

    void reCalculateFee(List<String> ids);

    void reCalculateFeeById(ReCalculateFeeParams params);

    ZadOrderDto getById(String id);

    List<OrderFee> getFeeListById(String id);

    Set<String> batchCreateInFee(List<Map<String, String>> dataList);

    Set<String> batchCreateOutFee(List<Map<String, String>> dataList);

    void unSetOrder(List<String> orderIds, String type);

    List<OrderFee> getFeeListByIds(List<String> asList);

    void batchImportFee(List<ZadOrderExportVo> importDatas, String opId);
}
